
/**
 * div层的控制器
 * 控制div的打开、关闭、最大化、最小化和拖动
 */
function DivController(arg) {
	this.mainDivId = arg["mainDivId"];
	this.bodyDivId = arg["bodyDivId"];
	
	this.divObj;
	
	this.n = 500;//div的zIndex
	
	this.dragok = false;
	
	this.x;//e.clientX
	this.y;//e.clientY
	
	this.dx;//div的左边距
	this.dy;//div的上边距
	
	this.evt = new EventUtil();
}

DivController.prototype = {
	//根据元素ID获取元素对象
	$:function(id) {
		return document.getElementById(id);
	},
	//获取样式对象
	gs:function(id) { 
		var t=this.$(id);
		if (t) { 
			return t.style;
		} else {
			return null;
		}
	},
	//获取样式中的某个属性值
	gs2:function(div,attr){
	    if (div.currentStyle){
			var curVal = div.currentStyle[attr];
	    }else{
			var curVal = document.defaultView.getComputedStyle(div, null)[attr];
	    }
	    return curVal;
	},
	//显示div
	openDiv:function(obj,left,top){
		var divObj = this.$(this.mainDivId);
		
		if(left != 'undefined' && left != null) {
			divObj.style.left = left;
		}
		if(top != 'undefined' && top != null) {
			divObj.style.top = top;
		}
		if(obj != 'undefined' && obj != null) {
			var offsetLeft = obj.offsetLeft;
			var offsetTop = obj.offsetTop;
			//alert("offsetLeft = " + offsetLeft + ",offsetTop = " + offsetTop);
			divObj.style.left = offsetLeft + 300;
			divObj.style.top = offsetTop + 80;
		}
		divObj.style.display = "block";
	},
	//关闭div
	closeDiv:function(){
		this.gs(this.mainDivId).display = "none";
	},
	//最小化
	toMinimize:function(){
		this.gs(this.bodyDivId).display = "none";
	},
	//最大化
	toMaximize:function(){
		this.gs(this.bodyDivId).display = "block";
	},
	/** 
	 * 该函数由mousedown事件处理调用,它为随后发生的mousemove和mouseup事件注册了临时的捕捉事件处理程序,并用这些事件处理程序拖动指定的文档元素
	 * 第一个参数必须是一个文档元素，该元素用CSS position性质绝对定位,CSS性质的left和top必须被明确地设置为像素值
	 * 第二个参数必须是mousedown事件的事件对象
	 */
	beginDrag:function(elementToDrag,event){
		var evt = this.evt;
		
	  	//该元素当前位于何处,该元素的样式性质必须具有left和top css属性
	  	var x=parseInt(elementToDrag.style.left);
	  	var y=parseInt(elementToDrag.style.top);
	  	 
		//计算一个点和鼠标点击(event.clientX,event.clientY)之间的距离	
		var deltaX=event.clientX-x;
		var deltaY=event.clientY-y;
		
		/**
		 * 注册mousedown事件后发生的mousemove和mouseup事件的处理程序
		 * 注意，它们被注册为文档的捕捉事件处理程序
		 * 在鼠标按钮保持按下的状态的时候，这些事件处理程序保持活动的状态
		 * 在按钮被释放的时候，它们被删除
		 */
		evt.attachEvent(document,"mousemove",moveHandler);
		evt.attachEvent(document,"mouseup",upHandler);
			
		evt.cancelBubble(event);//阻止事件从当前正在处理它的节点传播,不要让别的元素看到该事件。	
		evt.cancelDefault(event);//阻止浏览器执行与事件相关的默认动作
  		
  		//这是在元素被拖动时候捕捉mousemove事件的处理程序，它响应移动的元素
  		function moveHandler(e)  {
  			//全局属性，否则就用DOM二级标准的Event对象。
　　			if (!e) e=window.event; //如果是IE的事件对象，那么就用window.event
			//把元素移动到当前的鼠标位置,根据初始鼠标点击的偏移量进行调整。
    		elementToDrag.style.left=(event.clientX-deltaX)+"px";
    		elementToDrag.style.top=(event.clientY-deltaY)+"px";
    		
    		//不要让别的元素看到该事件
     		evt.cancelBubble(event);
    	}
  		
  		//该事件将捕捉拖动结束的时候发生的mouseup事件
  		function upHandler(e){
  			if (!e){e=window.event;}
  			//注销事件处理程序
  			evt.detachEvent(document,"mousemove",moveHandler);
  			evt.detachEvent(document,"mouseup",upHandler);
      	}
      	evt.cancelBubble(event);
	},
	initDiv:function(divController) {
		function move(e) {
			if (!e) e = window.event;
			if (divController.dragok == true){
				divController.divObj.style.left = divController.dx + e.clientX - divController.x + "px";
			  	divController.divObj.style.top  = divController.dy + e.clientY - divController.y + "px";
			  	return false;
			}
		}
		function down(e){
			if (!e) e = window.event;
			var temp = (typeof e.target != "undefined")?e.target:e.srcElement;

			if (temp.tagName != "HTML"|"BODY" && temp.className != "dragDiv"){
				temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
			}
			
			if('TR'==temp.tagName){
				temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
			  	temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
			  	temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement;
			}
			
			if (temp.className == "dragDiv"){
				divController.dragok = true;
				temp.style.zIndex = divController.n++;
				divController.divObj = temp;
				divController.dx = parseInt(divController.gs2(temp,"left"))|0;
				divController.dy = parseInt(divController.gs2(temp,"top"))|0;
				divController.x = e.clientX;
				divController.y = e.clientY;
				document.onmousemove = move;
				return false;
			}
		}
		function up(){
			divController.dragok = false;
			document.onmousemove = null;
		}
		if  (document.getElementById){
			document.onmousedown = down;
			document.onmouseup = up;
		}
	}
	 
}
